4.3 Understanding basic validation

  • 웹 워크에서 수행되는 Validation 단계
    • 자동적으로 action들의 validate 수행
    • 에러들을 수집하고 사용자에게 보고함

4.3.1 Validating an action: Validateable

  • WebWork에서는 execute() 메소드를 콜하기 전에 validate를 수행한다.
  • 자동으로 validate를 수행하게 하기 위해서는 com.opensymphony.xwork.Validateable 인터페이스를 구현 해야 한다.

    public void validate()

  • execute() method에서 내용을 검증하는 예전 방식 코드

public String execute() throws Exception {
    // 이름이 이미 존재하는지 검증로직 시작 //
    User existing = userDAO.findByUsername(this.user.getUsername());
    if (existing != null) {
        addFieldError("user.username", "The user already exists");
        return INPUT;
    }
    //검증 로직 끝 // 
    
    userDAO.makePersistent(user);
    return SUCCESS;
}

  • validate() method를 사용하여 검증하는 코드

//검증로직
public void validate() {
    // see if the name already exists
    User existing = userDAO.findByUsername(this.user.getUsername());
    if (existing != null) {
        addFieldError("user.username", "The user already exists");
    }
}

//실행로직
public String execute() throws Exception {
    userDAO.makePersistent(user);
    return SUCCESS;
}

  • DefaultWorkFlowInterceptor 에 의해 조정됨
    • action이 Validateable을 구현하고 있다면 validate() method를 실행함
    • 만약 에러가 발생하면 INPUT을 리턴 그렇지 않으면 action의 execute를 실행

4.3.2 Displaying error messages: ValidationAware

  • ValidationAware는 에러메세지를 모으고 디스플레이 기능을 지원하는 인터페이스임.
  • ActionSupport가 com.opensymphony.xwork.ValidationAware 인터페이스를 구현 해줌.
    • 83page ValidationAware 인터페이스 참고
    • actionErrors, actionMessages: String error message를 저장, java.util.Collection 로 관리
    • fieldErrors : key, value 쌍으로 error message를 저장, java.util.Map 으로 관리
  • 참고 : fieldErrors jsp 사용

<%@ taglib prefix="ww" uri="webwork" %>
<html>
<head>
    <title>Enter your name</title>
</head>

<body>
    <ww:if test="fieldErrors['name'] != null">
      <font color="red">
        <ww:property value="fieldErrors['name']"/>
      </font>
    </ww:if>

    Please enter your name:
    <form action="/helloWorld.action">
      <input type="textfield" name="name" value="<ww:property value="name"/>"/>
      <input type="submit"/>
    </form>
</body>
</html>

  • ActionSupport를 상속 하지 않는 경우라면 com.opensymphony.xwork.ValidationAwareSupport를 사용하여 ValidationAware 구현하면 됨

문서에 대하여

  • 이 문서의 내용은 Webwork In Action 교재를 스터디 하면서 정리한 내용 입니다.
  • 최초작성자 : 김정식
  • 최초작성일 : 2007년 9월 21일
  • 이 문서는 오라클클럽 자바 웹개발자 스터디 모임에서 작성하였습니다.
  • 이 문서를 다른 블로그나 홈페이지에 퍼가실 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^\^